#include <sys/types.h>

#include <sys/socket.h>

#include <sys/un.h>

#include <stdio.h>

#define ADDRESS "mysocket" /* адрес для связи */

void main ()

{

  char c;

  int i, d, d1, len, ca_len;

  FILE *fp;

  struct sockaddr_un sa, ca;

  /* получаем свой сокет-дескриптор: */

  if((d = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) {

    perror ("client: socket"); exit (1);

  }

  /* создаем адрес, c которым будут

  связываться клиенты */

  sa.sun_family = AF_UNIX;

  strcpy (sa.sun_path, ADDRESS);

  /* связываем адрес с сокетом;

  уничтожаем файл с именем ADDRESS,

  если он существует, для того, чтобы

  вызов bind завершился успешно */

  unlink (ADDRESS);

  len = sizeof ( sa.sun_family) + strlen (sa.sun_path);

  if ( bind ( d, &sa, len) < 0 ) {

     perror ("server: bind"); exit (1);

  }

  /* слушаем запросы на сокет */

  if ( listen ( d, 5) < 0 ) {

  perror ("server: listen"); exit (1);

  }

  /* связываемся с клиентом через неименованный сокет

    с дескриптором d1:*/

  if (( d1 = accept ( d, &ca, &ca_len)) < 0 ) {

    perror ("server: accept"); exit (1);

  }

  /* пишем клиенту: */

  send (d1, "server", 7, 0);

  /* читаем запрос клиента */

  fp = fdopen (d1, "r");

  c = fgetc (fp);

  /* ................................ */

  /* обрабатываем запрос клиента, посылаем ответ и т.д.

   ........................... */

  /* завершаем сеанс работы */

  close (d1);

  exit (0);

} 
